package com.lollipop.synthential.java8.lambda.syntax;

import com.lollipop.synthential.java8.lambda.syntax.interfaces.*;

/**
 * @Author: J.K
 * @Date: 2021-02-14 20:28
 * @Description: Lambda语法Demo
 */
public class Syntax1 {
    public static void main(String[] args) {
        // 1. Lambda表达式的基础语法
        // Lambda是一个匿名函数
        //参数列表 方法体

        // ()：用来描述参数列表
        // {}：用来描述方法体
        // ->：Lambda运算符，读作goes to

        // 普通匿名内部类的方式实现接口
        LambdaSingleReturnMultipleParameter Lsrmp = new LambdaSingleReturnMultipleParameter() {
            @Override
            public int test(int a, int b) {
                return 0;
            }
        };

        // 无参无返回
        LambdaNoneReturnNoneParameter lambda1 = () -> {
            System.out.println("Lambda无参无返回接口方法");
        };
        lambda1.test();

        // 单参无返回
        LambdaNoneReturnSingleParameter lambda2 = (int a) -> {
            System.out.println("Lambda单参无返回接口方法");
        };
        lambda2.test(10);

        // 多参无返回
        LambdaNoneReturnMultipleParameter lambda3 = (int a, int b) -> {
            System.out.print("Lambda多参无返回接口方法：");
            System.out.println(a + b);
        };
        lambda3.test(10, 20);

        // 无参单返回
        LambdaSingleReturnNoneParameter lambda4 = () -> {
            System.out.println("Lambda无参单返回接口方法");
            return 100;
        };
        int ret = lambda4.test();
        System.out.println("Lambda无参单返回接口方法返回值：" + ret);

        // 单参单返回
        LambdaSingleReturnSingleParameter lambda5 = (int a) -> {
            System.out.println("Lambda单参单返回接口方法");
            return a;
        };
        int ret2 = lambda5.test(60);
        System.out.println("Lambda单参单返回接口方法返回值：" + ret2);

        // 多参单返回
        LambdaSingleReturnMultipleParameter lambda6 = (int a, int b) -> {
            System.out.println("Lambda多参单返回接口方法");
            return a * b;
        };
        int ret3 = lambda6.test(20, 60);
        System.out.println("Lambda多参单返回接口方法返回值：" + ret3);


    }
}
